home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 90 / CD Actual 90.iso / Software3D / VirtualLight / VLight1.3win32.exe / VibSDK / Samples / sample6.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-10-07  |  3.0 KB  |  103 lines

  1. /*
  2.  * VirtuaLight's binary .VIB format API, sample 5
  3.  * Written by Stephane Marty, 09/23/2001
  4.  *
  5.  * This sample program writes a binary VIB file
  6.  * describing a 13-component blobby primitive.
  7.  */
  8.  
  9. #include "..\vlBinDef.h"
  10.  
  11. static int F;
  12.  
  13. static void
  14. SetSphericalField(viBLOBBY *b, viVECTOR *v, viDBL r, viDBL s)
  15. {
  16.     b->components[F].type = FIELD_SPHERE;
  17.     viCopyVector(&b->components[F].sc_cb_pn, v);
  18.     viSetDbl(b->components[F].radius, r);
  19.     viSetDbl(b->components[F].strength, s);
  20.     F++;
  21. }
  22.  
  23. static void
  24. SetCylindricalField(viBLOBBY *b, viVECTOR *vec1, viVECTOR *vec2, viDBL r, viDBL s)
  25. {
  26.     b->components[F].type = FIELD_CYLINDER;
  27.     viCopyVector(&b->components[F].sc_cb_pn, vec1);
  28.     viCopyVector(&b->components[F].top, vec2);
  29.     viSetDbl(b->components[F].radius, r);
  30.     viSetDbl(b->components[F].strength, s);
  31.     F++;
  32. }
  33.  
  34. void main(void)
  35. {
  36.     viBLOBBY            *blb;
  37.     viCAMERA            *cam;
  38.     viGENERAL            *gen;
  39.     viPOINT_LIGHT        *pl;
  40.     viFILE                *vib;
  41.     viVECTOR            vecA, vecB;
  42.     int k;
  43.    
  44.     // Open a new VIB file
  45.     vib = viNewBinaryVIB("sample6.vib");
  46.  
  47.     // Add the camera (low adaptive antialiasing enabled)
  48.     cam = viNewCamera();
  49.     viSetInt(cam->Format.X, 256);
  50.     viSetInt(cam->Format.Y, 256);
  51.     viSetDbl(cam->FrameAspectRatio, 1.0);
  52.     viSetVector(&cam->Location, 0, 10, -7);
  53.     viSetVector(&cam->LookAt, 0, 0, -1);
  54.     viSetVector(&cam->UpAxis, 0, 1, 0);
  55.     viSetDbl(cam->FieldOfView, 45);
  56.     viSetInt(cam->Antialiasing, 1);
  57.     viDumpCamera(cam, vib);
  58.  
  59.     // Set the background color
  60.     gen = viNewGeneral();
  61.     viSetColor(&gen->Background, 0.098039*2, 0.098039*2, 0.392157*2);
  62.     viDumpGeneral(gen, vib);
  63.  
  64.     // Add two pointlights
  65.     pl = viNewPointLight();
  66.     viSetColor(&pl->Intensity, 0.6, 0.6, 0.6);
  67.     viSetVector(&pl->Position, 20, 30, -10);
  68.     viDumpPointLight(pl, vib);
  69.     viSetColor(&pl->Intensity, 0.6, 0.6, 0.6);
  70.     viSetVector(&pl->Position, -15, 20, -20);
  71.     viDumpPointLight(pl, vib);
  72.  
  73.     /*
  74.      * create the blobby (13 components, threshold = 0.5)
  75.      */
  76.     blb = viNewBlobby((viDBL)0.5, 13);
  77.     viSetByte(blb->solver, VIETA_SOLVER);
  78.     // the 4 spherical fields...
  79.     F = 0;
  80.     SetSphericalField(blb, viSetVector(&vecA, -1, 0.5, -1), (viDBL)1.5, (viDBL)1.0);
  81.     SetSphericalField(blb, viSetVector(&vecA, -1, 0.5,  1), (viDBL)1.5, (viDBL)1.0);
  82.     SetSphericalField(blb, viSetVector(&vecA,  1, 0.5,  1), (viDBL)1.5, (viDBL)1.0);
  83.     SetSphericalField(blb, viSetVector(&vecA,  1, 0.5, -1), (viDBL)1.5, (viDBL)1.0);
  84.     // ...and the 9 cylindrical fields
  85.     for (k=-3; k<=3; k++)
  86.         SetCylindricalField(blb, viSetVector(&vecA, -4, 0, (viDBL)k), viSetVector(&vecB, 4, 0, (viDBL)k), (viDBL)0.75, (viDBL)1.0);
  87.     SetCylindricalField(blb, viSetVector(&vecA, -3.5, 0, -4), viSetVector(&vecB, -3.5, 0, 4), (viDBL)1.0, (viDBL)1.0);
  88.     SetCylindricalField(blb, viSetVector(&vecA, 3.5, 0, -4), viSetVector(&vecB, 3.5, 0, 4), (viDBL)1.0, (viDBL)1.0);
  89.     // dump the blobby
  90.     viPrimitive(vib);
  91.     viDumpBlobby(blb, vib);
  92.     viPrimitiveShaderName("blob", vib);
  93.     viEndPrimitive(vib);
  94.     viDeleteBlobby(blb);
  95.  
  96.     // Close the VIB file
  97.     viCloseBinaryVIB(vib);
  98.  
  99.     // Deallocate memory used
  100.     free(cam);
  101.     free(gen);
  102.     free(pl);
  103. }